Em Elixir, o processamento de dados segue duas filosofias distintas: Guloso (Ansioso) e Lento. Compreender essa troca é essencial para a eficiência de memória e a estabilidade do sistema.
1. O Protocolo Enumerable
Tecnicamente, coisas que podem ser iteradas são ditas implementar o protocolo Enumerable. Esse contrato comum permite que estruturas de dados diversas trabalhem com o mesmo conjunto de funções.
2. Módulos Gulosos vs. Lentos
O Enum módulo é guloso. Ele potencialmente consome todos os conteúdos de uma coleção imediatamente, criando listas intermediárias em cada etapa da pipeline. Por outro lado, o Stream módulo é lento. O próximo valor é calculado apenas quando for necessário.
3. Especificação vs. Resultado
Uma valor Stream é uma especificação do que pretendíamos, mas não o resultado. Streams são enumeráveis e componíveis, permitindo que você aplique transformações sem executar trabalho até passar o stream para um "coletor ansioso" como Enum.to_list/1.
4. Pureza de Paradigma
Combinar paradigmas (funcional e orientado a objetos) reduz os benefícios que uma abordagem funcional oferece. Prefira transformações declarativas em vez de laços imperativos para maior previsibilidade.